단일 책임 원칙
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
단일 책임 원칙(Single Responsibility Principle, SRP)은 로버트 C. 마틴이 제시한 객체 지향 설계 원칙 중 하나로, 클래스나 모듈은 변경해야 할 이유가 단 하나여야 한다는 개념이다. 이는 톰 드마코와 메일러 페이지-존스의 응집도 원칙에 기반한다. 이 원칙은 코드의 견고성을 높이고, 보고서 컴파일 및 출력 모듈과 같은 예시에서 서로 다른 변경 이유를 가진 책임을 분리하여 설계의 유연성을 향상시키는 데 기여한다.
더 읽어볼만한 페이지
- 프로그래밍 원칙 - 블랙박스
블랙 박스는 자극 입력과 출력 반응의 관점에서 시스템을 추상화하여 외부적으로 관찰하는 이론으로, 전자 회로 이론, 사이버네틱스, 시스템 이론 등 다양한 분야에서 활용되며 예측 모델 구축 및 유효성 검증, 그리고 항공기 비행 기록 장치나 함수 교육 도구 등 실생활에도 응용된다. - 프로그래밍 원칙 - 정보 은닉
정보 은닉은 소프트웨어 설계에서 모듈 내부 구현을 숨기고 정의된 인터페이스를 통해서만 상호 작용하도록 하여 모듈 독립성을 높이고 시스템 복잡성을 관리하는 데 중요한 기법으로, 객체 지향 프로그래밍의 캡슐화와 관련된다. - 소프트웨어 설계 - 구조적 분석
구조적 분석은 1960년대에서 1980년대 소프트웨어 개발의 복잡성을 해결하기 위해 개발된 기법으로, 다이어그램과 데이터 사전을 활용하여 시스템을 분석하고 설계했으며, 객체 지향 프로그래밍의 등장으로 활용도가 감소했다. - 소프트웨어 설계 - 지속적 배포
지속적 배포(CD)는 소프트웨어 릴리스 프로세스를 자동화하는 접근 방식이며, 배포 파이프라인을 통해 구현되고 시장 출시 시간 단축, 제품 품질 향상 등의 이점을 제공하지만 테스트 자동화 부족 등의 과제도 존재한다.
| 단일 책임 원칙 | |
|---|---|
| 단일 책임 원칙 | |
| 정의 | 모든 클래스는 단 하나의 책임을 가져야 하며, 클래스를 변경하는 이유는 단 하나여야 한다. |
| 설명 | 객체 지향 프로그래밍에서, 단일 책임 원칙은 모든 모듈 또는 클래스는 프로그램에서 단 하나의 기능만을 담당해야 한다고 말한다. 여기서 책임은 변경의 이유로 정의될 수 있다. 즉, 모듈이나 클래스가 변경될 이유가 두 개 이상이라면, 그 모듈이나 클래스는 여러 책임을 가지고 있는 것이다. |
| 목표 | 높은 응집도와 낮은 결합도를 달성하는 것. |
| 중요성 | 클래스의 유지보수성을 높인다. 클래스의 재사용성을 높인다. 클래스의 복잡성을 줄인다. |
| 예시 | 클래스가 사용자 인터페이스와 데이터베이스 접근 모두를 처리하는 경우. 클래스가 여러 종류의 보고서를 생성하는 경우. |
| 해결책 | 클래스를 더 작은 클래스로 분할하여 각 클래스가 단 하나의 책임을 갖도록 한다. |
| 관련 용어 | 응집도 결합도 객체 지향 프로그래밍 |
| 같이 보기 | SOLID |
2. 역사
로버트 C. 마틴은 "단일 책임 원칙"이라는 용어를 그의 저서 ''객체 지향 설계의 원칙''의 일부인 "OOD의 원칙" 기사에서 처음 소개했으며,[5] 2003년 저서 ''애자일 소프트웨어 개발, 원칙, 패턴 및 실천''을 통해 대중화했다.[6] 마틴은 이 원칙이 톰 드마코의 ''구조적 분석과 시스템 명세'',[7] 메일러 페이지-존스의 ''구조적 시스템 설계 실무 가이드''에서[8] 설명된 응집도 원칙에 기반한다고 설명했다. 2014년 마틴은 "단일 책임 원칙"이라는 제목의 블로그 게시물을 게시하여 "변경 이유"라는 문구의 의미를 명확히 하려고 했다.
마틴은 책임이란 변경할 이유이며, 모듈을 변경하는 이유는 단 하나여야 한다고 정의했다. 모듈을 변경하는 이유를 하나로 제한하는 목적은 모듈의 견고성을 높이는 것이다.[1]
3. 개념
예를 들어 보고서를 작성하고 그리는 모듈을 가정해 보자. 이 모듈은 보고서 내용을 변경하고 싶을 때나 보고서 형식을 변경하고 싶을 때 변경해야 한다. 이 두 가지 변경은 각각 다른 주체에 의해 이루어진다. 따라서 이 모듈은 변경할 이유, 즉 책임을 여러 개 가지고 있으며, 이들을 결합하는 설계는 단일 책임 원칙에 위배된다. 보고서 내용 변경에 따라 보고서 작성 구현을 수정할 경우, 보고서를 그리는 처리에도 영향이 미칠 가능성이 있다.[1]
3. 1. 예시
마틴은 책임을 "변경해야 할 이유"로 정의하며, 클래스나 모듈은 변경(예: 재작성)해야 할 이유가 하나만 있어야 한다고 결론 내린다.
예를 들어, 보고서를 컴파일하고 출력하는 모듈을 생각해 보자. 이러한 모듈은 두 가지 이유로 변경될 수 있다. 첫째, 보고서의 내용이 변경될 수 있다. 둘째, 보고서의 형식이 변경될 수 있다. 이 두 가지는 다른 원인으로 인해 변경된다. 단일 책임 원칙은 문제의 이러한 두 가지 측면이 실제로 두 개의 별도 책임이며, 따라서 별도의 클래스나 모듈에 있어야 한다고 말한다. 다른 이유로 다른 시기에 변경되는 두 가지를 결합하는 것은 좋지 않은 설계이다.
클래스가 단일 관심사에 집중하는 것이 중요한 이유는 클래스를 더 견고하게 만들기 때문이다. 위의 예시를 계속해서, 보고서 컴파일 프로세스에 변경이 있는 경우, 인쇄 코드가 동일한 클래스의 일부라면 인쇄 코드가 고장 날 위험이 더 크다.
4. 장점
마틴은 책임을 "변경해야 할 이유"로 정의하며, 클래스나 모듈은 변경(예: 재작성)해야 할 이유가 하나만 있어야 한다고 결론 내린다.[1]
예를 들어, 보고서를 컴파일하고 출력하는 모듈을 생각해 보자. 이러한 모듈은 보고서의 내용이나 형식, 두 가지 이유로 변경될 수 있다. 이 두 가지는 서로 다른 원인으로 인해 변경된다. 단일 책임 원칙은 문제의 이러한 두 가지 측면이 실제로 두 개의 별도 책임이며, 따라서 별도의 클래스나 모듈에 있어야 한다고 말한다. 서로 다른 이유로 다른 시기에 변경되는 두 가지를 결합하는 것은 좋지 않은 설계이다.[1]
클래스가 단일 관심사에 집중하는 것이 중요한 이유는 클래스를 더 견고하게 만들기 때문이다. 보고서 컴파일 프로세스에 변경이 있는 경우, 인쇄 코드가 동일한 클래스에 있으면 인쇄 코드가 고장날 위험이 더 크다.[1]
참조
[1]
서적
Clean architecture : a craftsman's guide to software structure and design
https://www.worldcat[...]
2018
[2]
서적
Agile Software Development, Principles, Patterns, and Practices
https://books.google[...]
Prentice Hall
[3]
웹사이트
The Single Responsibility Principle
https://blog.cleanco[...]
[4]
서적
Clean Architecture: A Craftsman's Guide to Software Structure and Design
https://books.google[...]
Prentice Hall
[5]
웹사이트
The Principles of OOD
http://www.butuncleb[...]
[6]
Harvb
[7]
서적
Structured Analysis and System Specification
https://archive.org/[...]
Prentice Hall
[8]
서적
The Practical Guide to Structured Systems Design
Yourdon Press Computing Series
[9]
서적
Agile Software Development, Principles, Patterns, and Practices
https://books.google[...]
Prentice Hall
2022-07-10
[10]
웹사이트
The Single Responsibility Principle
https://8thlight.com[...]
2022-07-10
[11]
서적
Clean Architecture: A Craftsman's Guide to Software Structure and Design
https://books.google[...]
Prentice Hall
[12]
웹사이트
The Principles of OOD
http://www.butuncleb[...]
2022-07-10
[13]
Harvb
[14]
서적
Structured Analysis and System Specification
https://archive.org/[...]
Prentice Hall
[15]
서적
The Practical Guide to Structured Systems Design
Yourdon Press Computing Series
[16]
서적
[17]
URL
http://www.butuncleb[...]
[18]
서적
https://archive.org/[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com